package com.cyd.springboot02;

import org.springframework.boot.Banner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.Environment;

import java.io.PrintStream;

/**
 * @author keyer
 * 解释：项目的启动类，使用java -jar启动的就是这个类；
 * 1.@SpringBootApplication：springboot的核心注解，主要目的是开启自动配置，它是一个组合注解；
 * 2.main方法则是程序的入口方法；
 * 3.main方法中，使用SpringApplication.run(Springboot02Application.class, args)启动项目；
 */
@SpringBootApplication
public class Springboot02Application {

    private static ConfigurableApplicationContext context;

    public static void main(String[] args) {
        // 注释掉原本的启动方法 SpringApplication.run(Springboot02Application.class, args);
        SpringApplication application = new SpringApplication(Springboot02Application.class);
        // 设置一个空的banner
        application.setBanner(new Banner() {
            @Override
            public void printBanner(Environment environment, Class<?> sourceClass, PrintStream out) {
                out.println("哈哈哈哈哈哈");
            }
        });
        // 获得容器
        context = application.run(args);
        // 项目启动完成后输出
        System.out.println("--------------项目启动了---------------");
        // 通过容器获得系统属性
        ConfigurableEnvironment environment = context.getEnvironment();
        String port = environment.getProperty("server.port");
        System.out.println("http://localhost:" + port + "/c/hello");
        System.out.println("http://localhost:" + port + "/c/getBook");
        System.out.println("http://localhost:" + port + "/c/getAuthor");

    }

}
